from logging import Filter
import platform
import os
from project_path import get_project_path
import logging
from logging.handlers import RotatingFileHandler


class RootNameFilter(Filter):
    """仅允许记录 'root' 下的日志信息"""
    @staticmethod
    def filter(record):
        return record.name == 'root'  # 检查记录器的名称


def setup_logging():
    """配置日志信息"""
    # 配置日志目录
    if platform.system() == 'Windows':  # windows
        log_dir = os.path.join(get_project_path(), 'logs')  # 项目根目录下的 logs 文件夹
    else:  # Linux/其他
        log_dir = os.path.join(os.path.expanduser('~'), '.text2sql', 'logs')  # 用户主目录下的.text2sql/logs
    # 创建日志目录
    os.makedirs(log_dir, exist_ok=True)
    # 配置日志文件路径
    log_file = os.path.join(log_dir, 'app.logs')
    # 配置日志轮转：单文件最大1MB，保留5个备份
    file_handler = RotatingFileHandler(
        log_file,
        maxBytes=1024 * 1024,
        backupCount=5,
        encoding='utf-8'  # 使用 UTF-8 编码
    )
    file_handler.setLevel(logging.INFO)
    file_handler.addFilter(RootNameFilter())
    # 控制台日志输出
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)
    console_handler.addFilter(RootNameFilter())
    # 统一日志格式
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    # formatter.converter = lambda *args: logging.Formatter.converter(*args)  # 使用UTC时间
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)
    # 配置根日志记录器
    root_logger = logging.getLogger()
    root_logger.setLevel(logging.DEBUG)
    root_logger.addHandler(file_handler)
    root_logger.addHandler(console_handler)


if __name__ == '__main__':
    setup_logging()
    logging.info("应用程序启动")
